SoK: zero-knowledge proofs (zkp) libraries, writing circuits and future work
論文じゃない、個人的にまとめている
At first, you should read the following:
世界一わかりやすいゼロ知識証明 Vol.1: A Gentle Primer on Ethereum
世界一わかりやすいゼロ知識証明 Vol.2: Zero-Knowledge Proofs in the Context of Modern Cryptography
注意
概念とライブラリ混ざっているかも
zkpライブラリ, 証明システムの歴史
システムだけ並べて技術ではなくてプロダクトは外す
低レベルのzkpライブラリと定義してもいいかも
ちなみに一番初めは
1985年のGoldwasser, Micali, and Rackoffの論文「The Knowledge Complexity of Interactive Proof-Systems(対話型証明システムの知識の複雑性)」で最初に提案
2011年
zk-SNARKs, Succinct Non-interactive ARguments of Knowledge
高価な計算のレシートをオフチェーンで作成し、レシートの検証コストのみをオンチェーンで負担できるようにする
ここがSuccinct??
2016年
初めてZcashによってユースケースが生まれる
zk-SNARKs + 証明サイズ(数百バイト)が小さく、生成が高速
2017年
2018年
STARKsはSTARKの証明やアプリケーションに使われる場合が多い
2019年
R1CS関連
Aztec、Mina、Celoなどのプロダクト開発に寄与
進化系
再帰的zk-SNARKs
2020年
2022年
PlonK + STARK
いつ頃か不明
sum-check based SNARKs
次の高レベルのzkp開発フレームワーク開発するために
基礎となるZKPバックエンドの複雑さを抽象化する
様々なZKPバックエンドとハードウェア環境(例:CPUとGPU)をサポートする
ハードウェア部門だけを考えると
効率的なデバッグとテストを可能にするNvidiaがAIハードウェアに特化したように、zkpハードウェアアクセラレータの設計構築をすること
例題やチュートリアルを含む豊富な開発環境を提供する
zkpの回路を書く言語
証明システムがバックエンド
回路作成はフロントエンド
4つのアプローチ
1)組み込みDSL(ドメイン固有言語)アプローチ
RustでのR1CS回路
Golangでの回路
Swayは?
2)新しいプログラミング言語を発明するアプローチ
Nova Scotia?
3)開発者が書いた好きなプログラミング言語のコードを直接回路にコンパイルできるアプローチ
zkVM-land
Lassoもここ?
sum-chack based SNARKs
zkEVM
など
zkp技術の改善技術
再帰的なzk-SNARKsの一形態
Blockchain w/ zkp
zkpの課題
スピード
ほとんどの場合、すべての演算を回路で符号化することは現実的ではない
証明器の動作が遅くなり、多くのメモリを使用すること
回路はフィールド(大きな素数のモジュロ数を考える)上でエンコードされ、ビット演算(対称暗号の基本的なすべてに影響する)やbigint演算(非対称暗号の基本的なすべてに影響する)を大量に必要とするものとは相性が悪いこと
一般的に、XOR演算や値がある範囲内にあるかどうかのチェックといった単純なことが、回路サイズを簡単に肥大化させてしまう
ユーザーはプライバシー強化よりより良い体験を選ぶ
社会で信頼のネットワークが必要
ZKPが提供する高度な保証は不要な場合が多く、より多くの信頼が必要な場合は署名で十分な場合が多い
解決策
1)クラウドの高性能マシンでやる
主に計算の圧縮を提供するマシン・ツー・マシン・アプリケーションではある程度うまくいく
ユーザーはクラウド上の信頼できないマシンとプライベートな入力を共有したくないので厄介
2)回路サイズを小さくするために、これらの演算を高速化する
3)回路を複数の小さな回路に分割する
高度な暗号技術との組み合わせ
MPCとの組み合わせ
1)クラウドの高性能マシンでやるの解決策の例
zkpの使ったアプリケーション
ユーザーが関与していない場合、ゼロ知識証明の圧縮と検証可能な計算の側面は完全にゲームチェンジャー
どういうこと?
以下はまだ調べていない
zkpのプロダクトの種類
暗号プリミティブ、ブロックチェーン
プロダクト名とか企業名ってのも多い
Horizon
Iron Fish
Filecoin
FilecoinはZKPを使用して「ストレージプロバイダが保存を主張するデータを正しく保存していること」を確認します。このプロセスは、複製証明(PoReb)と呼ばれます。このプロセスでは、ストレージプロバイダはZKPを生成して、データの一意のコピーを保存していること、つまり、他のプロバイダが維持するコピーを参照していないことを証明します。ZKPは、一定レベルの冗長性と可用性を実現したいFilecoinユーザーに対して保証を提供します。さらに、証明のサイズは保存データよりもはるかに小さいため、ZKPを使用することによって、ストレージプロバイダーの帯域幅の要件を減らすことを可能にしています
Groth16
GPUを使用して証明プロセスを高速化 ver.
Tornado Cash
zkpプロジェクト向け支援期間
Scroll
zkEVM
zkSync 2.0
zkEVM
zkpアプリケーション
Filecoin
Dark Forest
ゲーム分野
不完全情報ゲームの作成に応用
プレイヤーの行動をプレイヤーが公開すると決めるまで非公開にする」ことが可能にする
インタラクティブなゲームを設計できる
EdgeswapがGPUを使用してPLONKの証明時間を75%短縮した例もあります
P≠NP予想
多項式計算
理論暗号学
ZK bootcamp
筑波大学
国立研究開発法人情報通信研究機構
暗号理論におけるブロックチェーン
Ethereum
日立
road to devcon 4.0 ~ security & privacy ゼロ知識証明とブロックチェーン
zkEmail
プロダクトアイデアのリスト
zkDocs
メディア
zk stydy club's playlist
snark design 1 - 3
from foundations
SNARK Design, Part I, with Justin Thaler | a16z crypto research talks
zk10
References:
各具体的なReferencesはリンクをクリックしてください